﻿namespace DimensionsHelper.Common.Contracts;

/// <summary>
///     实现此接口的类提供处理记录、警告、错误信息的方法。
/// </summary>
public interface IReporter
{
    /// <summary>
    ///     提示记录信息。
    /// </summary>
    /// <param name="level">当前记录级别</param>
    /// <param name="format">记录信息的文本模板，需要符合<see cref="string.Format(string, object[])" />中的格式要求。</param>
    /// <param name="args"><paramref name="format" />传入模板中替换的内容，顺序应当和模板配置相同。</param>
    void Log(ReportLevel level, string format, params object?[] args);

    /// <summary>
    ///     提示记录信息，此信息记录级别是<see cref="ReportLevel.Brief" />。
    /// </summary>
    /// <param name="format">记录信息的文本模板，需要符合<see cref="string.Format(string, object[])" />中的格式要求。</param>
    /// <param name="args"><paramref name="format" />传入模板中替换的内容，顺序应当和模板配置相同。</param>
    void Log(string format, params object?[] args);

    /// <summary>
    ///     提示警告信息。
    /// </summary>
    /// <param name="format">警告信息的文本模板，需要符合<see cref="string.Format(string, object[])" />中的格式要求。</param>
    /// <param name="args"><paramref name="format" />传入模板中替换的内容，顺序应当和模板配置相同。</param>
    void Warn(string format, params object?[] args);

    /// <summary>
    ///     提示错误信息。
    /// </summary>
    /// <param name="format">错误信息的文本模板，需要符合<see cref="string.Format(string, object[])" />中的格式要求。</param>
    /// <param name="args"><paramref name="format" />传入模板中替换的内容，顺序应当和模板配置相同。</param>
    void Error(string format, params object?[] args);
}